class Man:

    def __init__(self, name, age):
        """
        初始化魔术方法
        触发 : 初始化对象(不是实例化触发 但是和实例化在一个操作中)
        :param name:
        :param age:
        """
        self.name = name
        self.age = age
        print("init")

    def __new__(cls, *args, **kwargs):
        """
        实例化魔术方法
        触发 : 实例化类的时候
        :param args:
        :param kwargs:
        """
        print("new")
        return object.__new__(cls)

    def __call__(self, *args, **kwargs):
        """
        对象调用魔术方法
        触发 : 讲对象当成函数调用的时候 , 会默认调用此方法
        :param args:
        :param kwargs:
        :return:
        """
        print("call")

    def __del__(self):
        """
        析构魔术方法
        触发 : 当对象没有用(没有任何变量引用)的时候被触发
        :return:
        """
        print("del")

    def __str__(self):
        """
        
        :return:
        """
        return self.name


a = Man("张三", 0)
print(a)
